/*
 * Base64XBRL.java
 *
 * Created on 28 de octubre de 2007, 23:58
 *
 *
 */

package aplicacionbase64;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

 


/**
 * 
 * @author Maria Mora
 * @version v1.0
 */
public class Base64XBRL {
    
    /** Creates a new instance of Base64XBRL */
    public Base64XBRL() {
    }
    
  
        
    /**
     * Codifica cadena de bytes a BASE64
     * @return String codificado en BASE64
     * @param cadena array de bytes para codificar en BASE64
     */
    public String codificar(byte[] cadena){
       
        String cadenaCodificada=new String();
        try {
           Base64 bas=new Base64();
          
           cadenaCodificada = bas.encode(cadena);
       
        } catch (Exception ex) {
            ex.printStackTrace();
        }  
        
            return cadenaCodificada;
    } 
    
    
    
    
    /**
     * Codifica  fichero origen a fichero destino en BASE64
     * @param origen fichero destino donde se desea almacenar la codificación en BASE64
     */
    public void codificarFichero(File origen, File destino){
        
    
       try{
            
            //Stream entrada datos, tratamiento byte
            FileInputStream flujoLectura_O=new FileInputStream(origen); //Flujo de donde se leeran los datos,
            //Stream salida datos, tratamiento String
            PrintWriter salida = new PrintWriter(new BufferedWriter(new FileWriter(destino)));
            
            
            byte[] lectura_O=new byte[1024];
            int seguir=0;
            
            seguir=flujoLectura_O.read(lectura_O);
         
          
            while(seguir!=-1){
                
                  salida.write(codificar(lectura_O));
                  seguir=flujoLectura_O.read(lectura_O);

           }
            
            
            salida.close();
            flujoLectura_O.close();
 
        }
        
        
        catch(Exception e ){}
            
            
        }
        
    
    
  

    
  
   
    

    /**
     * Decodifica String en BASE64
     * @return Array de bytes decodificados 
     * @param cadenaCodificada String en BASE64 que se desea decodificar
     */
    public byte[] decodificar(String cadenaCodificada){
        byte[] reconstitutedBytes=new byte[1024] ;
        String cadenaOriginal=null;
        try {
            
            Base64 base64 = new Base64();
            reconstitutedBytes = base64.decode(cadenaCodificada);  
            
            
            
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
        return reconstitutedBytes;
        
        
    
    }
 
 
    
      
    
    /**
     * Decodifica fichero origen en BASE64 a fichero destino
     * @param destino Fichero donde se almacenará la decodificación
     * @param origen Fichero origen en BASE64
     */
       public void decodificarFichero(File origen, File destino){
        
         
        try{
            //Stream entrada datos, tratamiento String
             BufferedReader flujoLectura_O=new BufferedReader(new FileReader(origen)); 
            //Stream salida datos, tratamiento byte 
             FileOutputStream salida=new FileOutputStream(destino);
          
    
          
          
            String lectura_O=flujoLectura_O.readLine();
            String cadenaSalida="";
          
            while(lectura_O!=null){
                     
                salida.write(decodificar(lectura_O)); 
                lectura_O=flujoLectura_O.readLine();
                   

           }
         
          
        
            
     
          salida.close();
          flujoLectura_O.close();
 
        }
        
        
        catch(Exception e ){}
            
        
    }

 
    
    
    
}
